package com.storm.lib.util;

import java.lang.reflect.Method;
import java.sql.Timestamp;

/**
 *
 * 类功能:对象工具
 * @author johnny
 * @version 2010-11-1
 */
public class ObjectUtil {
//	protected final static Logger logger = Logger.getLogger(ObjectUtil.class);
	/**
	 *
	 * 更新时间:2010-11-1, 作者:johnny
	 * 方法功能:返回说对象列表的类列表
	 * @param vars
	 * @return
	 */
	public static Class[] getClazzs(Object[] vars) {
		if(vars==null){
			ExceptionUtil.throwInvalidParamException();
		}
		Class[] clazzs = new Class[vars.length];
		for (int i = 0; i < clazzs.length; i++) 
		{
			if(vars[i]==null){
				clazzs[i] = null;
			}
			else{
				clazzs[i] = vars[i].getClass();
			}
		}
		return clazzs;
	}

	/**
	 * 方法功能:返回实例
	 * 更新时间:2010-12-1, 作者:johnny
	 * @return
	 */
	public static Object getNewInstance(Class clazz) {
		try {
			return clazz.newInstance();
		} catch (Exception e) {
			ExceptionUtil.processException(e);
		}
		return null;
	}

	/**
	 * 方法功能:反射调用方法
	 * 更新时间:2010-12-1, 作者:johnny
	 * @return
	 */
	public static Object callFunction(Object obj,String methodName) {
		try {
			Class clazz = obj.getClass();
			Method method = clazz.getMethod(methodName, null);
			return method.invoke(obj, null);
		} catch (Exception e) {
			ExceptionUtil.processException(e);
		}
		return null;
	}

	/**
	 *
	 * 方法功能:打印出对象
	 * 更新时间:2010-12-9, 作者:johnny
	 * @param obj
	 */
	public static void printObject(Object obj){
//		logger.debug(JsonUtil.toJsonStr(obj));
	}

	public static boolean equal(Object obj1, Object obj2) {
		if(obj1==null || obj2 ==null){
			if(obj1!=null || obj2!=null){
				return false;
			}
			else{
				return true;
			}
		}
		if(obj1.getClass().equals(obj2.getClass())){
			if(obj1 instanceof Integer){
				if(((Integer)(obj1)).intValue()==((Integer)(obj2)).intValue()){
					return true;
				}
			}
			else if(obj1 instanceof Long){
				if(((Long)(obj1)).longValue()==((Long)(obj2)).longValue()){
					return true;
				}
			}
			else if(obj1 instanceof Short){
				if(((Short)(obj1)).intValue()==((Short)(obj2)).intValue()){
					return true;
				}
			}
			else if(obj1 instanceof Timestamp){
				if(((Timestamp)(obj1)).getTime()==((Timestamp)(obj2)).getTime()){
					return true;
				}
			}
			else if(obj1 instanceof String){
				if(((String)(obj1)).equals(((String)(obj2)))){
					return true;
				}
			}
			else{
				ExceptionUtil.throwInvalidParamException();
			}
		}
		else{
			return false;
		}
		return false;
	}

	/**
	 *
	 * 更新时间:2011-4-24, 作者:johnny
	 * 方法功能:根据类型
	 * @param value
	 * @param type
	 * @return
	 */
	public static Object getObjectFromString(String value, Class<?> type) {
		if(type==Integer.class || type==int.class){
			return Integer.valueOf(value);
		}
		else if(type==Long.class || type==long.class){
			return Long.valueOf(value);
		}
		else if(type==Short.class || type==short.class){
			return Short.valueOf(value);
		}
		else if(type==String.class){
			return value;
		}
		else{
			ExceptionUtil.throwInvalidParamException(type.getSimpleName());
		}
		return null;
	}
}
